<?php
/**
 * Created by Zhy
 * User: Zhy
 * Date: 2022/2/16
 * Time: 15:15
 */

namespace app\admin\controller;


use think\Db;
use think\Request;

class Bogoodscate extends Base
{
    /**
     * 商品分类
     * @return mixed|\think\response\Json
     */
    public function index(){
        if(request()->isAjax ()){
            $Nowpage = input('page') ? input('page') : 1;
            $limits = input("limit") ? input("limit") : 100;
            $count = Db::name('bo_goods_cate')->count();// 获取总条数
            $list = Db::name('bo_goods_cate')
                ->field('bgc_id, bgc_pid, bgc_level, bgc_name, bgc_time, bgc_sort')
                ->order('bgc_level asc, bgc_sort desc')
                ->page($Nowpage, $limits)
                ->select();
            // 数组排序
            $lists = [];
            $lists1 = [];
            foreach($list as $k => $v){
                if($v['bgc_level'] == 1){
                    array_push($lists, $list[$k]);
                    unset($list[$k]);
                }
            }
            foreach($lists as $kk => $vv){
                array_push($lists1, $lists[$kk]);
                foreach($list as $ke => $vo){
                    if($vo['bgc_pid'] == $vv['bgc_id']){
                        array_push($lists1, $list[$ke]);
                        unset($list[$ke]);
                    }
                }
            }
            
            return json(['code' => 220, 'msg' => '', 'count' => $count, 'data' => $lists1]);
        }
        return $this->fetch();
    }
    
    /**
     * 添加分类
     * @return mixed|\think\response\Json
     */
    public function cateAdd(){
        if(Request::instance()->isPost()){
            $bgc_pid = input('bgc_pid');
            $bgc_name = trim(input('bgc_name'), ' ');
            $bgc_sort = input('bgc_sort');
            
            $insert = [
                'bgc_pid' => $bgc_pid,
                'bgc_name' => $bgc_name,
                'bgc_sort' => $bgc_sort,
                'bgc_time' => date('Y-m-d H:i:s')
            ];
            if($bgc_pid == 0){
                $insert['bgc_level'] = 1;
            }else{
                $insert['bgc_level'] = 2;
            }
            $res = Db::table('up_bo_goods_cate')->insert($insert);
            if($res){
                return json(['code' => 200, 'msg' => '添加成功']);
            }else{
                return json(['code' => 100, 'msg' => '添加失败']);
            }
        }
        $bgc_id = input('bgc_id');
        $cate = Db::name('bo_goods_cate')
            ->field('bgc_id, bgc_pid, bgc_level, bgc_name, bgc_time')->where('bgc_level', 1)->select();
        return $this->fetch('bogoodscate/cateadd', ['cate' => $cate, 'bgc_id' => $bgc_id]);
    }
    
    /**
     * 编辑商品分类
     * @return mixed
     */
    public function cateEdit(){
        $bgc_id = input('bgc_id');
        if(Request::instance()->isPost()){
            $bgc_name = trim(input('bgc_name'), ' ');
            $bgc_pid = input('bgc_pid');
            $bgc_sort = input('bgc_sort');
            
            $update = [
                'bgc_pid' => $bgc_pid,
                'bgc_name' => $bgc_name,
                'bgc_sort' => $bgc_sort,
                'bgc_updatetime' => date('Y-m-d H:i:s')
            ];
            if($bgc_pid == 0){
                $update['bgc_level'] = 1;
            }else{
                $bgc = Db::table('up_bo_goods_cate')->where('bgc_id', $bgc_pid)->field('bgc_level')->find();
                $update['bgc_level'] = $bgc['bgc_level'] + 1;
            }
            $res = Db::table('up_bo_goods_cate')->where('bgc_id', $bgc_id)->update($update);
            if($res){
                return json(['code' => 200, 'msg' => '编辑成功']);
            }else{
                return json(['code' => 100, 'msg' => '编辑失败']);
            }
        }
        $list = Db::name('bo_goods_cate')
            ->field('bgc_id, bgc_pid, bgc_level, bgc_name, bgc_sort')
            ->order('bgc_level asc, bgc_sort desc')
            ->select();
        // 数组排序
        $lists = [];
        $lists1 = [];
        foreach($list as $k => $v){
            if($v['bgc_level'] == 1){
                array_push($lists, $list[$k]);
                unset($list[$k]);
            }
        }
        foreach($lists as $kk => $vv){
            array_push($lists1, $lists[$kk]);
            foreach($list as $ke => $vo){
                if($vo['bgc_pid'] == $vv['bgc_id']){
                    array_push($lists1, $list[$ke]);
                    unset($list[$ke]);
                }
            }
        }
        $cate = Db::table('up_bo_goods_cate')->where('bgc_id', $bgc_id)->field('bgc_id, bgc_name, bgc_level, bgc_pid, bgc_sort')->find();
        return $this->fetch('bogoodscate/cateedit', ['bgc_id' => $bgc_id, 'cateList' => $lists1, 'cate' => $cate]);
    }
    
    /**
     * 删除分类
     * @return \think\response\Json
     */
    public function cateDel(){
        $bgc_id = input('id');
        $cate = Db::table('up_bo_goods_cate')->where('bgc_id', $bgc_id)->field('bgc_level')->find();
        if($cate['bgc_level'] == 1){ // 如果是一级分类
            $have_lower = Db::table('up_bo_goods_cate')->where('bgc_pid', $bgc_id)->find();
            if($have_lower) return json(['code' => 100, 'msg' => '该分类有下级分类，请先删除下级分类']);
            $have_goods = Db::table('up_bo_goods')->where('bg_first_cate', $bgc_id)->where('bg_status', 'BETWEEN', [1, 2])->find();
            if($have_goods) return json(['code' => 100, 'msg' => '该分类下有商品，请先删除商品']);
        }else{ // 如果是二级分类
            $have_goods = Db::table('up_bo_goods')->where('bg_second_cate', 'LIKE', '%,' . $bgc_id . ',%')->where('bg_status', 'BETWEEN', [1, 2])->find();
            if($have_goods) return json(['code' => 100, 'msg' => $have_goods]);
        }

        $res = Db::table('up_bo_goods_cate')->delete($bgc_id);
        if($res){
            return json(['code' => 200, 'msg' => '删除成功']);
        }else{
            return json(['code' => 100, 'msg' => '删除密码']);
        }
    }

    /**
     * 排序
     * @return \think\response\Json
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function updateSort(){
        $id = input('id');
        $param = [
            'bgc_sort'=>input('value'),
        ];
        $res = Db::table('up_bo_goods_cate')->where('bgc_id', $id)->update($param);
        if($res){
            return json(['code' => 200, 'msg' => '修改成功']);
        }else{
            return json(['code' => 100, 'msg' =>' 修改失败']);
        }
    }
}